/*
 * @Descripttion: 缓存相关
 * @version:
 * @Author: lhl
 * @Date: 2024-11-17 01:59:23
 * @LastEditors: lhl
 * @LastEditTime: 2024-11-17 02:12:55
 */
import type { RequestConfig } from './types';

// 缓存项接口
interface CacheItem {
  data: any;
  expires: number;
}

/**
 * 请求缓存管理类
 */
export class RequestCache {
  // 使用 Map 存储缓存数据
  private cache: Map<string, CacheItem> = new Map();

  /**
   * 生成缓存key
   * @param config 请求配置
   * @returns 缓存key
   */
  generateKey(config: RequestConfig): string {
    return [config.method, config.url, JSON.stringify(config.params || {}), JSON.stringify(config.data || {})].join(
      '_',
    );
  }

  /**
   * 设置缓存
   * @param key 缓存key
   * @param data 缓存数据
   * @param timeout 过期时间(ms)
   */
  set(key: string, data: any, timeout: number): void {
    this.cache.set(key, {
      data,
      expires: Date.now() + timeout,
    });
  }

  /**
   * 获取缓存
   * @param key 缓存key
   * @returns 缓存数据或null
   */
  get(key: string): any | null {
    const item = this.cache.get(key);
    if (!item) return null;

    // 检查是否过期
    if (Date.now() > item.expires) {
      this.cache.delete(key);
      return null;
    }

    return item.data;
  }

  /**
   * 清除所有缓存
   */
  clear(): void {
    this.cache.clear();
  }
}
